package problem.ej1;

import input.Problem1Input;
import output.Problem1Output;

import instance.Instance;
import instance.InstanceEj1;

import java.util.Iterator;
import java.util.LinkedList;

public class Ej1 {
		/** El contador que vamos a usar para medir el rendimiento **/
	public static int contador_ej1; 

	public static void AlgoritmoPpal(String nomarch, boolean test_rend) throws Exception {
		
		/** Leo el archivo de entrada y extraigo las instancias del problema**/
		Problem1Input entrada = new Problem1Input(nomarch);
		entrada.readFile();
		LinkedList<Instance> instancias = entrada.getInstances();
		
		LinkedList<Integer> soluciones = new LinkedList<Integer>();
		LinkedList<String> strings_test_rend = new LinkedList<String>();
		Iterator<Instance> it = instancias.iterator();
		
		while(it.hasNext()){
			InstanceEj1 inst = (InstanceEj1) it.next();
			int res = 0;
			
			Ej1.contador_ej1 = 0;
			
			ejercicio1 ej1_obj = new ejercicio1();
			int[] precios = inst.getInstancia();
			int tamano = inst.getSize();
			
			res = ej1_obj.precios(precios, tamano);
			
			if(test_rend){
				long estimatedTime = Ej1.contador_ej1;
				String linea = String.valueOf(tamano) + " " +String.valueOf(estimatedTime);
				strings_test_rend.add(linea);
			}
			else soluciones.add(res);
		}
		
		if(!test_rend){
			Problem1Output salida = new Problem1Output(nomarch +".solucion");
			salida.escribirSolucion(soluciones);
		}else{
			String ArchSalida = nomarch +".testRend";
			Problem1Output salida = new Problem1Output(ArchSalida);
			/////// HACER .writeTestRend!!
			salida.writeTestRend(strings_test_rend);
		}
	}
	
	public static void main(String[] args) throws Exception {
		AlgoritmoPpal("./src/resources/Tp1Ej1.in", false);
		//AlgoritmoPpal("./src/resources/Tp1Ej1.in", true);
	}

}
